]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
ShellWindowTracker: support looking apps from GApplication IDs
authorGiovanni Campagna <gcampagna@src.gnome.org>
Sun, 18 Aug 2013 16:41:22 +0000 (18:41 +0200)
committerGiovanni Campagna <gcampagna@src.gnome.org>
Sun, 18 Aug 2013 20:05:45 +0000 (22:05 +0200)
In the new application model, there is one ID shared by GApplication,
DBus and .desktop files, so we can use that for the association,
instead of fiddling with badly cased wm classes.

https://bugzilla.gnome.org/show_bug.cgi?id=706252

src/shell-window-tracker.c

index e922cdd14ba6587d81a7c8ea665fd3636a826743..b686893c55e7feb1789a8d0184f9f71d91f37521 100644 (file)
@@ -258,6 +258,27 @@ get_app_from_window_wmclass (MetaWindow  *window)
   return NULL;
 }
 
+static ShellApp *
+get_app_from_gapplication_id (MetaWindow  *window)
+{
+  ShellApp *app;
+  ShellAppSystem *appsys;
+  const char *id;
+  char *desktop_file;
+
+  appsys = shell_app_system_get_default ();
+
+  id = meta_window_get_gtk_application_id (window);
+  if (!id)
+    return FALSE;
+
+  desktop_file = g_strconcat (id, ".desktop", NULL);
+  app = shell_app_system_lookup_app (appsys, desktop_file);
+
+  g_free (desktop_file);
+  return app;
+}
+
 /**
  * get_app_from_window_group:
  * @monitor: a #ShellWindowTracker
@@ -374,6 +395,13 @@ get_app_for_window (ShellWindowTracker    *tracker,
   if (meta_window_is_remote (window))
     return _shell_app_new_for_window (window);
 
+  /* Check if the window has a GApplication ID attached; this is
+   * canonical if it does
+   */
+  result = get_app_from_gapplication_id (window);
+  if (result != NULL)
+    return result;
+
   /* Check if the app's WM_CLASS specifies an app; this is
    * canonical if it does.
    */